/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI.Relatorio;

import Facade.Facade;
import Objetos.Cliente;
import Objetos.Condicao_pedido;
import Objetos.CondicaoePagamento;
import Objetos.OS;
import Objetos.Usuario;
import Objetos.ValoresFixos;
import java.awt.Color;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Calendar;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;

/**
 *
 * @author celio
 */
public final class ConsultaOS extends JPanel {

    JButton consultar, imprimir, limpar;
    JLabel idOS, placa, nomeCliente, valor, dataInclusao, dataEntrega, descProduto,status;
    JTextField tIdOS, tPlaca, tNomeCliente, tValor, tDataInclusao, tDataEntrega;
    JTable servicos;
    JScrollPane scroller;
    Calendar data;
    Facade fa;
    OS os;
    Cliente cli;
    CondicaoePagamento CondPag;
    Condicao_pedido CondPagPedido;
    JProgressBar progressImpressao;

    public ConsultaOS(final Usuario usu) {

        JLabel tela = new JLabel("... :::   Consulta O.S.   ::: ...");
        tela.setBounds(400, 10, 500, 20);
        add(tela);

        data = Calendar.getInstance();

        status = new JLabel();
        
        consultar = new JButton("Consultar");
        imprimir = new JButton("Imprimir");
        limpar = new JButton("Limpar");

        idOS = new JLabel("Número: ");
        tIdOS = new JTextField(10);

        placa = new JLabel("Placa: ");
        tPlaca = new JTextField();

        nomeCliente = new JLabel("Cliente: ");
        tNomeCliente = new JTextField(40);

        valor = new JLabel("Valor: ");
        tValor = new JTextField(20);

        dataInclusao = new JLabel("Data de inclusão: ");
        tDataInclusao = new JTextField(15);

        dataEntrega = new JLabel("Data de entrega: ");
        tDataEntrega = new JTextField(5);

        descProduto = new JLabel("------------------------------------------------------------------------------------");

        tPlaca.setEditable(false);
        tNomeCliente.setEditable(false);
        tValor.setEditable(false);
        tDataInclusao.setEditable(false);
        tDataEntrega.setEditable(false);
        
        progressImpressao = new JProgressBar();
        progressImpressao.setStringPainted(true);   
        progressImpressao.setMinimum(0);   
        progressImpressao.setMaximum(100);
        progressImpressao.setStringPainted(true); 

        consultar.setBounds(20, 400, 100, 20);
        imprimir.setBounds(120, 400, 100, 20);
        limpar.setBounds(220, 400, 100, 20);

        idOS.setBounds(10, 30, 100, 20);
        tIdOS.setBounds(80, 30, 30, 20);

        placa.setBounds(10, 60, 100, 20);
        tPlaca.setBounds(80, 60, 100, 20);

        nomeCliente.setBounds(10, 90, 100, 20);
        tNomeCliente.setBounds(80, 90, 100, 20);

        valor.setBounds(10, 120, 100, 20);
        tValor.setBounds(100, 120, 80, 20);

        dataInclusao.setBounds(10, 150, 100, 20);
        tDataInclusao.setBounds(120, 150, 100, 20);

        dataEntrega.setBounds(10, 180, 100, 20);
        tDataEntrega.setBounds(120, 180, 100, 20);
        
        status.setBounds(10, 210, 200, 20);

        descProduto.setBounds(380, 450, 400, 20);

        progressImpressao.setBounds(new Rectangle(575,10,400,20));
        progressImpressao.setVisible(false);
        
        add(consultar);
        add(imprimir);
        add(limpar);

        add(idOS);
        add(tIdOS);

        add(placa);
        add(tPlaca);

        add(nomeCliente);
        add(tNomeCliente);

        add(valor);
        add(tValor);

        add(dataInclusao);
        add(tDataInclusao);

        add(dataEntrega);
        add(tDataEntrega);

        add(descProduto);

        add(status);
        add(progressImpressao);
        
        //atualizaTabela();
        consultar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                fa = new Facade();
                os = fa.procurar_OS(tIdOS.getText(),usu);

                if (os == null) {
                    JOptionPane.showMessageDialog(null, "O.S. não cadastrada!!!");
                } else {
                    cli = fa.procurar_Cliente(os.getCliente(),usu);
                    tPlaca.setText(os.getPlaca());
                    tValor.setText(Funcoes.funcoes.paraFormatoDinheiro(Double.parseDouble(os.getValor())));
                    tDataInclusao.setText(Funcoes.funcoes.paraRecuperarData(os.getDataInclusao()));
                    tDataEntrega.setText(Funcoes.funcoes.paraRecuperarData(os.getDataEntrega()));

                    tNomeCliente.setText(cli.getNome());
                    tValor.setText(Funcoes.funcoes.paraFormatoDinheiroRelatorio(Double.parseDouble(os.getValor())));
                    descProduto.setText("------------------------------------------------------------------------------------");
                    
                    if(os.getStatus().equalsIgnoreCase(ValoresFixos.StatusOS.aberta.getStatus())){
                        status.setForeground(Color.green);
                        status.setText("Situação da O.S.: Aberta");
                    }
                     if(os.getStatus().equalsIgnoreCase(ValoresFixos.StatusOS.fechada.getStatus())){
                        status.setForeground(Color.red);
                        status.setText("Situação da O.S.: Fechada");
                    }
                    try {

                        remove(scroller);
                        remove(scroller);

                    } catch (NullPointerException e1) {
                    }

                    fa = new Facade();
                    servicos = fa.filtrarServicosOS_OS(tIdOS.getText(),usu);
                    servicos.setFont(new Font("Times New Roman", Font.BOLD, 14));
                    scroller = new JScrollPane(servicos, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
                    scroller.setBounds(350, 50, 720, 400);
                    add(scroller);

                    servicos.addMouseListener(new MouseListener() {

                        @Override
                        public void mouseClicked(MouseEvent e) {

                        }

                        @Override
                        public void mousePressed(MouseEvent e) {
                            //throw new UnsupportedOperationException("Not supported yet.");
                        }

                        @Override
                        public void mouseReleased(MouseEvent e) {
                            // throw new UnsupportedOperationException("Not supported yet.");
                        }

                        @Override
                        public void mouseEntered(MouseEvent e) {
                            //throw new UnsupportedOperationException("Not supported yet.");
                        }

                        @Override
                        public void mouseExited(MouseEvent e) {
                           //throw new UnsupportedOperationException("Not supported yet.");

                        }

                    });
                }
            }
        });

        imprimir.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
       
                progressImpressao.setVisible(true);
                Runnable runImpressao = new Runnable() {

                    @Override
                    public void run() {
                       fa = new Facade();
                       fa.imprimirOSporOS_Relatorio(tIdOS.getText(),usu);
                       progressImpressao.setIndeterminate(false);
                       progressImpressao.setValue(100);}
                };
                
                Runnable runBarra = new Runnable() {
                    @Override
                    public void run() {
                        progressImpressao.setIndeterminate(true);
                    }
                };
                
                Thread threadRelatorio = new Thread(runImpressao);
                Thread threadBarra = new Thread(runBarra);
                
                 try {  
            
                        threadBarra.start();  
                        threadRelatorio.join();  
                        threadRelatorio.start(); 
                        
                        } catch (InterruptedException ex) {  
            
                            System.out.println(ex.getLocalizedMessage());  
        
                        } 
                

            }
        });

        limpar.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                tIdOS.setText("");
                tPlaca.setText("");
                tNomeCliente.setText("");
                tValor.setText("");
                tDataEntrega.setText("");
                tDataInclusao.setText("");
                progressImpressao.setVisible(false);
                       
                
            }
        });

        setLayout(null);
        setBackground(Color.LIGHT_GRAY);
        setBorder(BorderFactory.createBevelBorder(1, Color.DARK_GRAY, Color.DARK_GRAY));
        setSize(800, 800);
        setVisible(true);
        revalidate();
        repaint();

    }

}
